/**
 * 语音关键词识别工具
 * 用于识别用户的语音意图
 */

/**
 * 肯定词汇列表
 * 当用户说这些词时，表示同意/需要
 */
const POSITIVE_KEYWORDS = [
  '需要',
  '要',
  '好',
  '可以',
  '行',
  '对',
  '是',
  '同意',
  '开始',
  '播放',
  '讲解',
  '听听',
  '说说',
  '介绍',
  '来吧',
  '好的',
  '好啊',
  '可以的',
  '没问题',
  '当然',
  'ok',
  'OK',
  'yes',
  'YES',
];

/**
 * 否定词汇列表
 * 当用户说这些词时，表示拒绝/不需要
 */
const NEGATIVE_KEYWORDS = [
  '不要',
  '不用',
  '不',
  '不需要',
  '不用了',
  '不讲',
  '不讲解',
  '不想听',
  '暂时不用',
  '算了',
  '取消',
  '退出',
  '关闭',
  '停止',
  '不行',
  '不可以',
  '不听',
  '不了',
  '不必',
  'no',
  'NO',
];

/**
 * 暂停词汇列表
 */
const PAUSE_KEYWORDS = ['暂停', '停一下', '等等', '等一下', '先停', 'pause'];

/**
 * 继续词汇列表
 */
const CONTINUE_KEYWORDS = [
  '继续',
  '接着',
  '往下',
  '再来',
  '播放',
  'continue',
  'play',
];

/**
 * 检查文本是否包含肯定意图
 * @param {string} text - 识别出的文本
 * @returns {boolean}
 */
export const isPositiveIntent = text => {
  if (!text) return false;
  const normalizedText = text.toLowerCase().trim();
  return POSITIVE_KEYWORDS.some(keyword =>
    normalizedText.includes(keyword.toLowerCase()),
  );
};

/**
 * 检查文本是否包含否定意图
 * @param {string} text - 识别出的文本
 * @returns {boolean}
 */
export const isNegativeIntent = text => {
  if (!text) return false;
  const normalizedText = text.toLowerCase().trim();
  return NEGATIVE_KEYWORDS.some(keyword =>
    normalizedText.includes(keyword.toLowerCase()),
  );
};

/**
 * 检查文本是否包含暂停意图
 * @param {string} text - 识别出的文本
 * @returns {boolean}
 */
export const isPauseIntent = text => {
  if (!text) return false;
  const normalizedText = text.toLowerCase().trim();
  return PAUSE_KEYWORDS.some(keyword =>
    normalizedText.includes(keyword.toLowerCase()),
  );
};

/**
 * 检查文本是否包含继续意图
 * @param {string} text - 识别出的文本
 * @returns {boolean}
 */
export const isContinueIntent = text => {
  if (!text) return false;
  const normalizedText = text.toLowerCase().trim();
  return CONTINUE_KEYWORDS.some(keyword =>
    normalizedText.includes(keyword.toLowerCase()),
  );
};

/**
 * 分析用户意图（推荐使用）
 * @param {string} text - 识别出的文本
 * @returns {Object} { intent: 'positive' | 'negative' | 'pause' | 'continue' | 'unknown', confidence: number }
 */
export const analyzeIntent = text => {
  if (!text) {
    return { intent: 'unknown', confidence: 0 };
  }

  // 按优先级检查意图
  // ⚠️ 重要：先检查否定词（如"不需要"），再检查肯定词（如"需要"）
  // 因为否定词通常包含肯定词，如果先检查肯定词会误判
  if (isNegativeIntent(text)) {
    return { intent: 'negative', confidence: 1.0, text };
  }

  if (isPositiveIntent(text)) {
    return { intent: 'positive', confidence: 1.0, text };
  }

  if (isPauseIntent(text)) {
    return { intent: 'pause', confidence: 1.0, text };
  }

  if (isContinueIntent(text)) {
    return { intent: 'continue', confidence: 1.0, text };
  }

  return { intent: 'unknown', confidence: 0, text };
};

/**
 * 获取友好的提示文本
 * @param {string} scenicAreaName - 景区名称
 * @returns {string}
 */
export const getWelcomePrompt = scenicAreaName => {
  if (
    scenicAreaName &&
    scenicAreaName !== '定位中...' &&
    scenicAreaName !== '定位失败'
  ) {
    return `您好，欢迎来到${scenicAreaName}，是否需要为您讲解当前景区？`;
  }
  return '您好，是否需要为您讲解附近的景区？';
};

/**
 * 获取默认景区介绍
 * @param {Object} scenicArea - 景区数据
 * @returns {string}
 */
export const getDefaultIntroduction = scenicArea => {
  if (!scenicArea) {
    return '很抱歉，暂时没有该景区的详细介绍。';
  }

  const { areaName, name, address, rating, level } = scenicArea;
  const displayName = areaName || name || '本景区';

  let intro = `${displayName}。`;

  if (level) {
    intro += `这是一个${level}景区。`;
  }

  if (rating) {
    intro += `游客评分${rating}分。`;
  }

  if (address) {
    intro += `位于${address}。`;
  }

  // 如果有详细介绍字段，使用它
  if (scenicArea.introduction || scenicArea.description) {
    intro += scenicArea.introduction || scenicArea.description;
  } else {
    intro += '这里风景优美，是旅游观光的好去处。';
  }

  return intro;
};

export default {
  isPositiveIntent,
  isNegativeIntent,
  isPauseIntent,
  isContinueIntent,
  analyzeIntent,
  getWelcomePrompt,
  getDefaultIntroduction,
};
